package Library;

import java.io.IOException;

/**
 * Hulp-klasse voor het omzetten van data.
 */
public class Convert
{ 
  /**
   * Verrandert een Byte-Array naar een Hexadecimale String.
   * @param value Byte-Array
   * @return Hexadecimale String
   */
  public static String toHexString(byte[] value)
  {
    StringBuilder sb = new StringBuilder();
    for (int t = 0; t < value.length; t++)
    {
      // Higher part
      byte half = (byte)((value[t] & 0xF0) >> 4);
      half += (half >= 0x0A) ? (0x41-10) : 48;
      sb.append((char)half);
      
      // Lower part
      half = (byte)(value[t] & 0xF);
      half += (half >= 0x0A) ? (0x41-10) : 48;
      sb.append((char)half);
    }
    return sb.toString();
  }

  /**
   * Verrandert een Hexadecimale String naar een Byte-Array.
   * @param value Hexadecimale String
   * @return Byte-Array
   */
  public static byte[] fromHexString(String value)
  {
    String uvalue = value.toUpperCase();

    byte[] bytes = new byte[((value.length() + 1) / 2)];

    for (int t = value.length() - 1; t >= 0; t--)
    {
       byte val = (byte)uvalue.charAt(t);
       val -= (val >= (byte)'A') ? (0x41-10) : 0x30;

       // Higher or Lower part
       if (t % 2 == 0)
         bytes[t / 2] |= (val << 4);
       else
         bytes[t / 2] |= val;
    }
    return bytes;
  }
  
  /**
   * Test Functie om te testen of de klasse Convert werkt.
   * @param args entry point arguments
   */
  public static void main(String args[])
  {
     String hex = "12345ABCDEF09876"; // even
     System.out.println(hex);
     System.out.println(Convert.toHexString(Convert.fromHexString(hex)));
     
     hex = "D"; // oneven
     System.out.println(hex);
     System.out.println(Convert.toHexString(Convert.fromHexString(hex)));
     
     try
     {
        // blijf draaien tot gebruiker toets in geeft.
        int key = System.in.read();
     }
     catch (IOException ex)
     {
        ex.printStackTrace();
     }
  }
}
